package darknet.application.chat.spec;

import darknet.application.chat.impl.net.message.BroadcastChannelMessage;
import darknet.application.chat.impl.net.message.BroadcastExitChannelMessage;
import darknet.application.chat.impl.net.message.BroadcastJoinChannelMessage;
import darknet.application.chat.impl.net.message.ChannelMessage;
import darknet.application.chat.impl.net.message.CloseChannelMessage;
import darknet.application.chat.impl.net.message.ExitChannelMessage;
import darknet.application.chat.impl.net.message.JoinChannelMessage;
import darknet.application.chat.impl.net.message.PrivateMessage;
import darknet.application.chat.impl.net.message.SessionExitMessage;
import darknet.application.chat.impl.net.message.SessionStartMessage;

/**
 * A message observer.
 *
 * This interface is used to notify  new messages / events.
 *
 * @author yoyo
 */
public interface MessageObserver {

    // TODO Write javadoc

    void newSessionStartMessage(SessionStartMessage message);

    void newPrivateMessage(PrivateMessage message);

    void newSessionExitMessage(SessionExitMessage message);

    void newJoinChannelMessage(JoinChannelMessage message);

    void newBroadcastJoinChannelMessage(BroadcastJoinChannelMessage message);

    void newChannelMessage(ChannelMessage message);

    void newBroadcastChannelMessage(BroadcastChannelMessage message);

    void newExitChannelMessage(ExitChannelMessage message);

    void newBroadcastExitChannelMessage(BroadcastExitChannelMessage message);

    void newCloseChannelMessage(CloseChannelMessage message);
}
